Skip to content

fix(strix): accept legal Packrat fixture paths - #800

Open
seonghobae wants to merge 27 commits into
mainfrom
fix/strix-legal-packrat-paths
Open

fix(strix): accept legal Packrat fixture paths#800
seonghobae wants to merge 27 commits into
mainfrom
fix/strix-legal-packrat-paths

Conversation

@seonghobae

@seonghobae seonghobae commented Aug 6, 2026

Copy link
Copy Markdown
Contributor

Buyer-visible blocker

The organization-required Strix gate rejected a tracked legal Packrat fixture path containing comma and ASCII parentheses before security analysis, blocking exact-head review of ContextualWisdomLab/aFIPC#160 even though the path is legal Git data.

Exact current stack

  • exact head: 87c302cf37343e5a816f1ddb24d3f6e0e12410d8;
  • protected base/main: e71fdab2ab088001f218765ecb5e3b7fabfee11a;
  • main is an ancestor and GitHub reports the six-file slice mergeable;
  • predecessor-head checks and reviews are stale and do not transfer.

Focused repair

  • Admit only comma plus ASCII ( and ) in the existing bounded changed-path allowlist.
  • Reject raw .. components before normalization can collapse embedded traversal.
  • Retain rejection of empty/dot, absolute, CR/LF/NUL, leading/trailing whitespace, backslash, shell metacharacters, unsupported Unicode punctuation, and out-of-root resolution.
  • Keep normalized paths quoted as arguments, never shell source.
  • Execute the permanent regression at the literal PR head on Python 3.14 with immutable action pins, read-only permissions, no persisted checkout credential, full repository tests through coverage.py, compilation, Bash syntax, and clean-worktree checks.
  • Install network-fetched test dependencies in hash-checking and binary-only mode with exact versions and wheel digests.
  • Trigger on implementation, tests, workflow, CHANGELOG.md, and authoritative doctoring changes.
  • Leave reviewer credentials and identities unchanged.

Exact-head acceptance evidence

For 87c302cf37343e5a816f1ddb24d3f6e0e12410d8, all exact-head workflows completed successfully:

  • Strix Changed Path Quality CI 31152007300;
  • CodeQL PR 31152007323;
  • Python Security 31152007376;
  • SAST Semgrep 31152007292;
  • Security Scan 31152007334;
  • Secret Scan 31152007324;
  • OSV-Scanner PR 31152007580;
  • Scorecard PR 31152007337;
  • SBOM Generation 31152007308;
  • CodeRabbit commit status: success.

Every inline review thread is resolved or outdated; zero actionable unresolved thread remains. The final scope is exactly .github/workflows/strix-changed-path-quality-ci.yml, CHANGELOG.md, docs/doctoring/strix-legal-git-paths.md, scripts/ci/strix_quick_gate.sh, tests/test_strix_changed_path_policy.py, and tests/test_strix_workflow_dependency_hashes.py.

Formal exact-current-head OpenCode/Noema review and a qualifying independent non-author approval are still required. Queued, cancelled, predecessor-head, status-only, author-only, or synthetic evidence is not accepted.

Merge gate

Merge only after fresh exact-head automated review, qualifying independent non-author approval, zero unresolved actionable findings, and every branch-protection rule pass without bypass. After integration, rerun Strix for unchanged aFIPC#160; predecessor failure is not reused.

Summary by CodeRabbit

  • 버그 수정

    • 변경 파일 경로에서 쉼표와 ASCII 괄호를 정상적으로 허용합니다.
    • 경로 순회, 절대 경로, 제어 문자, 백슬래시, 모호한 공백 및 셸 문자는 계속 차단합니다.
  • 문서

    • 지원되는 Git 경로 규칙과 보안 정책을 문서화했습니다.
    • 의존성 무결성 검증 및 장애 대응 절차를 추가했습니다.
  • 테스트 및 품질

    • 경로 검증과 의존성 해시 검사를 자동화했습니다.
    • 관련 변경 시 회귀 검사, 구문 검사 및 작업 결과 무변경 검증을 수행합니다.
    • 안전하지 않은 의존성 설치를 방지합니다.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Review Change Stack

📝 Walkthrough

Walkthrough

Strix 변경 경로 정책이 쉼표와 ASCII 괄호를 허용하도록 변경되었습니다. 원시 .. 구성 요소와 위험 문자는 계속 차단됩니다. 회귀 테스트와 해시 검증 기반 GitHub Actions 품질 워크플로가 추가되었습니다.

Changes

Strix 경로 정책

Layer / File(s) Summary
경로 정책 및 회귀 검증
scripts/ci/strix_quick_gate.sh, tests/test_strix_changed_path_policy.py
경로 정규화기가 쉼표와 ASCII 괄호를 허용합니다. 원시 .. 구성 요소, 절대 경로, 제어 문자, 공백 모호성, 백슬래시 및 셸 구문 문자는 거부합니다. 격리된 임시 저장소에서 허용·거부 경로를 검증합니다.
정책 문서 및 변경 기록
docs/doctoring/strix-legal-git-paths.md, CHANGELOG.md
경로 allowlist, fail-closed 조건, 테스트 절차, PyPI wheel 해시 검증 및 복구 절차를 기록합니다. 변경 기록에 허용 문자를 반영합니다.
경로 정책 품질 CI
.github/workflows/strix-changed-path-quality-ci.yml, tests/test_strix_workflow_dependency_hashes.py
지정된 pull request와 수동 실행에서 고정된 Python 의존성을 --require-hashes 및 바이너리 전용 옵션으로 설치합니다. 전체 테스트, 구문 검사, 셸 회귀 검사 및 작업 트리 무변경 검사를 실행합니다.

Estimated code review effort: 3 (Moderate) | ~20 minutes

Possibly related PRs

  • ContextualWisdomLab/.github#759: Strix CI 강화, 의존성 해시 검증 및 회귀 테스트 흐름이 겹치지만 다른 코드 경로를 수정합니다.
🚥 Pre-merge checks | ✅ 5
✅ Passed checks (5 passed)
Check name Status Explanation
Description Check ✅ Passed Check skipped - CodeRabbit’s high-level summary is enabled.
Title check ✅ Passed 제목은 쉼표와 ASCII 괄호를 포함한 합법적인 Packrat fixture 경로 허용이라는 주요 변경을 정확하고 간결하게 설명합니다.
Docstring Coverage ✅ Passed Docstring coverage is 88.89% which is sufficient. The required threshold is 80.00%.
Linked Issues check ✅ Passed Check skipped because no linked issues were found for this pull request.
Out of Scope Changes check ✅ Passed Check skipped because no linked issues were found for this pull request.
✨ Finishing Touches
📝 Generate docstrings
  • Create stacked PR
  • Commit on current branch
🧪 Generate unit tests (beta)
  • Create PR with unit tests
  • Commit unit tests in branch fix/strix-legal-packrat-paths

Comment @coderabbitai help to get the list of available commands.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Review-only exact-head request for 63fdd37232d471087ece807a9b9f7bd98991cb62. Validate the narrow Strix changed-path compatibility boundary, exact-head quality workflow, initiating aFIPC evidence, fail-closed path regressions, doctoring, and unchanged reviewer/security controls. Do not update the branch, approve from the author identity, enable bypass, or merge.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Review exact current head 63fdd37232d471087ece807a9b9f7bd98991cb62; predecessor-head review or check evidence is historical only.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

@seonghobae I will review exact head 63fdd37232d471087ece807a9b9f7bd98991cb62. I will treat predecessor-head evidence as historical only.

✅ Action performed

Review finished.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 2

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/strix-changed-path-quality-ci.yml:
- Around line 6-9: Update the workflow’s paths configuration to include
docs/doctoring/strix-legal-git-paths.md and CHANGELOG.md so changes to either
contract file trigger validation. In the workflow test step, replace the
single-test-file invocation with the full suite command using coverage and
pytest against tests in quiet mode.

In `@tests/test_strix_changed_path_policy.py`:
- Around line 65-84: Reject raw “..” path components before normalization in the
changed-path normalizer, and add “safe/../target.txt” to the rejected cases in
tests/test_strix_changed_path_policy.py:65-84. Update
docs/doctoring/strix-legal-git-paths.md:20-29 to retain the traversal-rejection
claim only after this fix, and remove or limit the same fail-closed claim in
CHANGELOG.md:15 until the fix is applied.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 306ffc18-d8b4-4332-a38e-0f618add47b9

📥 Commits

Reviewing files that changed from the base of the PR and between f070c50 and 63fdd37.

📒 Files selected for processing (5)
  • .github/workflows/strix-changed-path-quality-ci.yml
  • CHANGELOG.md
  • docs/doctoring/strix-legal-git-paths.md
  • scripts/ci/strix_quick_gate.sh
  • tests/test_strix_changed_path_policy.py

Comment thread .github/workflows/strix-changed-path-quality-ci.yml
Comment thread tests/test_strix_changed_path_policy.py
Comment thread .github/workflows/repair-strix-embedded-traversal.yml Fixed
Comment thread .github/workflows/repair-strix-embedded-traversal-v2.yml Fixed
Comment thread .github/workflows/strix-changed-path-quality-ci.yml Fixed
Comment thread .github/workflows/repair-strix-embedded-traversal-v3.yml Fixed

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Review exact current head f48ee444097b741092c05fa99715b2a494550099. The prior actionable findings are now implemented: raw .. components are rejected before normalization, the full repository suite runs through coverage.py and pytest, and implementation plus authoritative contract files trigger the exact-head workflow. Treat all predecessor-head evidence as historical.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Review-only exact-head request for f48ee444097b741092c05fa99715b2a494550099. Validate the legal Packrat path compatibility boundary, raw traversal rejection before normalization, immutable/read-only exact-head full-suite workflow, initiating aFIPC evidence, APA 7 doctoring, and unchanged reviewer/security controls. Do not update the branch, approve from the author identity, weaken gates, or merge.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

@seonghobae I will review exact head f48ee444097b741092c05fa99715b2a494550099. I will treat all predecessor-head evidence as historical only.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Please retry the exact-current-head review for f48ee444097b741092c05fa99715b2a494550099; the earlier retry was rate-limited. All exact-head workflows are now complete and successful, and both predecessor review findings are implemented and resolved.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

@seonghobae I will retry the review for exact head f48ee444097b741092c05fa99715b2a494550099. I will treat all predecessor-head evidence as historical.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Review exact current head f48ee444097b741092c05fa99715b2a494550099. The previous two findings are implemented and their threads are resolved; verify the corrected raw-traversal boundary and full-suite exact-head workflow rather than predecessor head 63fdd37232d471087ece807a9b9f7bd98991cb62.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

@seonghobae I will review exact head f48ee444097b741092c05fa99715b2a494550099.

I will verify the raw-traversal rejection boundary and the full-suite exact-head workflow. I will treat 63fdd37232d471087ece807a9b9f7bd98991cb62 as historical only.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor Author

Addressed the remaining Scorecard Pinned-Dependencies finding on exact head 10ae16200bd049f91f2c724b8608ef93280dbaeb. Test-first commit a4f810dd53f64fe0b3d7f403888d9f3b9ff7fd93 introduced a failing permanent contract for pip hash-checking mode, all six exact wheel digests, and workflow trigger coverage. Implementation commit 968b57b833ef473fccdd60db0bbf362e8b398f94 now uses --only-binary=:all: --require-hashes and PyPI-published SHA-256 values for the CPython 3.14/Linux x86-64 artifacts; doctoring commit 10ae16200bd049f91f2c724b8608ef93280dbaeb records the trust boundary, rollback procedure, and APA 7 primary references. The thread is intentionally left for independent automated disposition because the thread-resolution mutation was unavailable; no review evidence is being treated as resolved until GitHub records it so.

@seonghobae
seonghobae enabled auto-merge (squash) August 6, 2026 23:33

Copy link
Copy Markdown
Contributor Author

@opencode-agent

Review-only request for exact current head dc97cefcd44f3edeb6471660bf74afcd983b4273. Validate the bounded legal-path expansion, pre-normalization raw .. rejection, quoted argv use, requirements-file hash-checking mode, complete exact-head test/security matrix, and absence of temporary branch-writing workflows. Do not update or merge.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review @coderabbitai review

Review-only request for exact current head dc97cefcd44f3edeb6471660bf74afcd983b4273 against protected main f070c504c1cb06891b800d7ab0cf6ac7d3cf8eae. Strix Changed Path Quality CI and every exact-head CodeQL, Python Security, Semgrep, Security Scan, Secret Scan, OSV, Scorecard, and SBOM run are complete and successful; all inline threads are resolved. The pip hash-checking failure was repaired test-first by materializing exact package/digest pairs in a requirements file and installing it through --require-hashes -r, without broadening token or path policy. Validate legal comma/parenthesis acceptance, pre-normalization raw .. rejection, shell-safe argument boundaries, dependency hashes, and full-suite evidence. Do not mutate the branch, approve as author, or merge; submit actionable findings or a formal exact-head review.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

@seonghobae I will review exact head dc97cefcd44f3edeb6471660bf74afcd983b4273 against main at f070c504c1cb06891b800d7ab0cf6ac7d3cf8eae.

I will validate the stated path-policy boundary, raw traversal rejection, argument handling, dependency hash enforcement, workflow coverage, and security controls. I will treat prior-head evidence as historical only. I will not mutate, approve, bypass, or merge the branch.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

Copy link
Copy Markdown
Contributor Author

@cwl-noema-review

Independently review exact current head dc97cefcd44f3edeb6471660bf74afcd983b4273, focusing on lexical path safety, traversal rejection before normalization, supply-chain hash provenance, least privilege, and whether current-head evidence supports every doctoring claim. Do not mutate or merge.

Copy link
Copy Markdown
Contributor Author

@coderabbitai review
@opencode-agent review
@cwl-noema-review review

Read-only exact-head review requested for dc97cefcd44f3edeb6471660bf74afcd983b4273. The complete quality, security, and supply-chain checks and CodeRabbit status are successful; all review threads are resolved and auto-merge is armed. Verify the narrow legal-path allowance, raw .. rejection before normalization, remaining path/shell protections, hash-locked Python 3.14 full-suite validation, and unchanged reviewer credentials. Submit formal APPROVE only if no actionable defect remains. Do not mutate or manually merge.

@coderabbitai

coderabbitai Bot commented Aug 6, 2026

Copy link
Copy Markdown

Rate Limit Exceeded

@seonghobae have exceeded the limit for the number of chat messages per hour. Please wait 8 minutes and 48 seconds before sending another message.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Review exact head dc97cefcd44f3edeb6471660bf74afcd983b4273 against protected main. Verify the narrowly expanded legal-path character set, raw embedded-.. rejection before normalization, quoted-argument use, dependency hash contract, exact-head/full-suite workflow, six-file final scope, successful checks, and zero unresolved current findings. Review only; do not update, approve as author, merge, release, alter credentials, or weaken protection.

Copy link
Copy Markdown
Contributor Author

@opencode-agent review

Review exact head dc97cefcd44f3edeb6471660bf74afcd983b4273 read-only. Strix Changed Path Quality 31131219597, CodeQL 31131221370, Python Security 31131222178, SAST Semgrep 31131222029, SBOM 31131222143, Scorecard 31131222454, Security Scan 31131224310, Secret Scan 31131224951, OSV 31131228051, and CodeRabbit status are successful; all current and predecessor inline findings are resolved or outdated. Verify the allowlist admits only comma and ASCII parentheses while rejecting raw .. path components before normalization, absolute/empty/dot paths, CR/LF/NUL, leading/trailing whitespace, backslashes, shell metacharacters, unsupported Unicode punctuation, and out-of-root resolution. Confirm normalized paths remain quoted arguments, never shell source; the permanent quality workflow triggers on implementation, tests, doctoring, and CHANGELOG and runs the full repository suite with coverage, compilation, Bash syntax, and clean-worktree checks using immutable actions and hash-locked binary-only dependencies. Submit a qualifying non-author approval only if exact-head evidence is complete.

Copy link
Copy Markdown
Contributor Author

@cwl-noema-review review

Independently review exact head dc97cefcd44f3edeb6471660bf74afcd983b4273 read-only, focusing on legal-Git-path compatibility, pre-normalization traversal rejection, shell argument confinement, immutable action/dependency pins, full quality trigger coverage, and absence of any branch-writing repair workflow. Submit a current-head verdict only; do not mutate or merge.

@seonghobae seonghobae reopened this Aug 7, 2026
@seonghobae
seonghobae enabled auto-merge (squash) August 7, 2026 05:36

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

Review only exact current head c51bf92cfa614c83d63bee73bc069ebd242a941c against protected-main base e6fc91416c4fb13febd07b985c6e9c74fe888306. The exact-head Strix path-quality, security, supply-chain, and CodeRabbit status checks are complete; all visible predecessor inline findings are resolved or outdated. Reverify legal comma/ASCII-parenthesis acceptance, raw .. rejection before normalization, all remaining hostile path exclusions, shell-argument quoting, hash-locked binary-only test tooling, full central test execution, and truthful doctoring/CHANGELOG. Do not merge, auto-merge, release, publish, rebase, or retarget.

Copy link
Copy Markdown
Contributor Author

@opencode-agent Perform a read-only exact-head review of PR #800 at c51bf92cfa614c83d63bee73bc069ebd242a941c against base e6fc91416c4fb13febd07b985c6e9c74fe888306; do not modify files or refs.

Independently verify the bounded changed-path grammar, raw traversal rejection before normalization, out-of-root resolution, NUL/CR/LF/backslash/shell-metacharacter and unsupported-Unicode rejection, legal Packrat punctuation acceptance, full-suite permanent quality workflow, immutable action and wheel/hash pins, and unchanged reviewer credential boundary. Submit a current-head outcome only after inspecting the exact tree and successful exact-head runs. Do not merge, enable auto-merge, release, publish, rebase, or retarget.

Copy link
Copy Markdown
Contributor Author

@cwl-noema-review Review exact current head c51bf92cfa614c83d63bee73bc069ebd242a941c only. Reassess the permanent six-file Strix changed-path repair, current-head checks, path grammar and traversal boundary, dependency integrity, and documentation accuracy. Keep this review read-only; do not modify, merge, enable auto-merge, release, rebase, or retarget.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown
🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
head='c51bf92cfa614c83d63bee73bc069ebd242a941c'
base='e6fc91416c4fb13febd07b985c6e9c74fe888306'

printf '%s\n' '== Commit identity =='
printf 'checked-out: '; git rev-parse HEAD
printf 'requested head: '; git rev-parse "${head}^{commit}"
printf 'requested base: '; git rev-parse "${base}^{commit}"

printf '%s\n' '== Live pull request metadata, checks, and reviews =='
gh pr view 800 --repo "$repo" \
  --json headRefOid,baseRefOid,files,statusCheckRollup,reviews \
  --jq '{headRefOid,baseRefOid,files:[.files[].path],checks:[.statusCheckRollup[]|{name,status,conclusion}],reviews:[.reviews[]|{author:.author.login,state}]}'

printf '%s\n' '== Exact diff scope and whitespace validation =='
git diff --name-status "$base" "$head"
git diff --check "$base" "$head"
git diff --stat "$base" "$head"

printf '%s\n' '== Source maps =='
ast-grep outline scripts/ci/strix_quick_gate.sh --items all || true
ast-grep outline tests/test_strix_changed_path_policy.py --items all || true
ast-grep outline tests/test_strix_workflow_dependency_hashes.py --items all || true

printf '%s\n' '== Quality workflow =='
cat -n .github/workflows/strix-changed-path-quality-ci.yml

printf '%s\n' '== Changed-path normalization and use =='
rg -n -C 14 \
  'normalize_changed_file_path|allowed|raw.*\.\.|\.\.|realpath|read -r|printf|git diff|eval|sh -c|bash -c|STRIX_TEST_CHANGED_FILES_OVERRIDE' \
  scripts/ci/strix_quick_gate.sh

printf '%s\n' '== Path-policy, dependency, and shell-suite assertions =='
rg -n -C 5 \
  'Packrat|comma|parenthes|traversal|absolute|control|whitespace|backslash|shell|Unicode|out.of.root|require-hashes|only-binary|test_strix_quick_gate|coverage.*pytest|pytest|STRIX_TEST_CHANGED_FILES_OVERRIDE' \
  tests/test_strix_changed_path_policy.py \
  tests/test_strix_workflow_dependency_hashes.py \
  scripts/ci/test_strix_quick_gate.sh \
  .github/workflows/strix-changed-path-quality-ci.yml || true

printf '%s\n' '== Doctoring and changelog =='
cat -n docs/doctoring/strix-legal-git-paths.md
tail -n 80 CHANGELOG.md

printf '%s\n' '== Exact reviewed diff =='
git diff --no-ext-diff --unified=45 "$base" "$head" -- \
  .github/workflows/strix-changed-path-quality-ci.yml \
  scripts/ci/strix_quick_gate.sh \
  tests/test_strix_changed_path_policy.py \
  tests/test_strix_workflow_dependency_hashes.py \
  docs/doctoring/strix-legal-git-paths.md \
  CHANGELOG.md

Length of output: 202913


🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
head='c51bf92cfa614c83d63bee73bc069ebd242a941c'
base='e6fc91416c4fb13febd07b985c6e9c74fe888306'
log='/tmp/coderabbit-shell-logs/shell-output-Pjmk8U'

printf '%s\n' '== Retained identity and live PR metadata =='
sed -n '1,120p' "$log"

printf '%s\n' '== Current identity =='
printf 'checked-out: '; git rev-parse HEAD
printf 'requested head: '; git rev-parse "${head}^{commit}"
printf 'requested base: '; git rev-parse "${base}^{commit}"

printf '%s\n' '== Current check state =='
gh pr view 800 --repo "$repo" --json headRefOid,baseRefOid,statusCheckRollup \
  --jq '{headRefOid,baseRefOid,checks:[.statusCheckRollup[]|{name,status,conclusion}]}'

printf '%s\n' '== Unresolved review threads =='
gh api graphql -F owner='ContextualWisdomLab' -F name='.github' -F number=800 -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      reviewThreads(first: 100) {
        nodes { isResolved isOutdated comments(first: 1) { nodes { path line } } }
      }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select(.isResolved | not) | {isOutdated, comments:.comments.nodes}]'

printf '%s\n' '== Exact workflow and shell-only test evidence =='
nl -ba .github/workflows/strix-changed-path-quality-ci.yml | sed -n '1,72p'
nl -ba scripts/ci/test_strix_quick_gate.sh | sed -n '8984,8998p'
rg -n -C 2 'complete repository test suite' docs/doctoring/strix-legal-git-paths.md

Length of output: 34085


@seonghobae Exact-head review verdict: request changes.

I verified the checked-out commit and live PR head as c51bf92cfa614c83d63bee73bc069ebd242a941c. I reviewed it against base e6fc91416c4fb13febd07b985c6e9c74fe888306.

I found one actionable issue.

  • Line 61 in .github/workflows/strix-changed-path-quality-ci.yml runs only python -m coverage run -m pytest tests -q.
  • The workflow does not run scripts/ci/test_strix_quick_gate.sh.
  • The shell suite contains changed-path regressions that pytest tests does not execute. These include Unicode slash-lookalike rejection and bidi-control rejection at Lines 8989-8995.
  • Therefore, exact-head-path-policy does not validate all central changed-path regressions.
  • The statement in docs/doctoring/strix-legal-git-paths.md at Lines 47-49 that the workflow runs the complete repository test suite is not supported.

Add this command to the verification step. Keep the existing pytest command.

bash scripts/ci/test_strix_quick_gate.sh

The remaining inspected controls are correctly bounded. The normalizer adds comma and ASCII parentheses only. It rejects raw .. components before normalization. The workflow uses exact-head checkout, read-only contents permission, disabled persisted credentials, immutable action pins, Python 3.14, and hash-verified binary-only dependencies.

There are no unresolved review threads. One live strix check remains IN_PROGRESS, so the current status set is not fully complete. I did not approve, merge, or modify the PR.

⚠️ Action not completed

Review rate limited.

Note: CodeRabbit is an incremental review system and does not re-review already reviewed commits. This command is applicable only when automatic reviews are paused.

@opencode-agent
opencode-agent Bot disabled auto-merge August 7, 2026 05:49

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Review exact current head c51bf92cfa614c83d63bee73bc069ebd242a941c read-only. Every current-head quality, security, and supply-chain workflow is successful and all inline review threads are resolved or outdated. Verify the narrowly expanded legal Git path allowlist, pre-normalization raw .. rejection, quoted argument boundary, hash-locked binary-only quality tooling, six-file permanent scope, and unchanged reviewer/security controls. Submit a formal non-author approval only if no actionable defect remains. Do not mutate the branch, weaken protection, or merge.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Copy link
Copy Markdown
Contributor Author

@coderabbitai review

@opencode-agent @cwl-noema-review Review exact current head 87c302cf37343e5a816f1ddb24d3f6e0e12410d8 only. All nine exact-head quality and security workflows are successful and zero actionable inline thread remains. Verify the final six-file boundary: comma and ASCII-parenthesis compatibility for legal Packrat paths; pre-normalization raw .. rejection; continued fail-closed controls for absolute, control, whitespace, backslash, shell, Unicode punctuation, and out-of-root paths; quoted argument use; hash-verified binary-only Python dependencies; literal-head checkout; full-suite coverage; APA 7 doctoring; and unchanged reviewer credentials. Treat all predecessor reviews as stale. Submit a formal exact-head review or path-specific actionable finding only; qualifying independent non-author approval remains mandatory.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Tip

For best results, initiate chat on the files or code changes.

🧩 Analysis chain

🏁 Script executed:

#!/bin/bash
set -euo pipefail

repo='ContextualWisdomLab/.github'
head='87c302cf37343e5a816f1ddb24d3f6e0e12410d8'

printf '%s\n' '== exact commit identity =='
printf 'checked-out: '; git rev-parse HEAD
printf 'requested:   '; git rev-parse "${head}^{commit}"

printf '%s\n' '== live pull request state =='
gh pr view 800 --repo "$repo" \
  --json headRefOid,baseRefOid,files,statusCheckRollup,reviews \
  --jq '{headRefOid,baseRefOid,files:[.files[].path],checks:[.statusCheckRollup[]|{name,status,conclusion}],reviews:[.reviews[]|{author:.author.login,state}]}'

base="$(gh pr view 800 --repo "$repo" --json baseRefOid --jq '.baseRefOid')"
printf '%s\n' '== exact diff scope and integrity =='
git diff --name-status "$base" "$head"
git diff --check "$base" "$head"
git diff --stat "$base" "$head"

printf '%s\n' '== source maps =='
ast-grep outline scripts/ci/strix_quick_gate.sh --items all || true
ast-grep outline tests/test_strix_changed_path_policy.py --items all || true
ast-grep outline tests/test_strix_workflow_dependency_hashes.py --items all || true

printf '%s\n' '== quality workflow =='
cat -n .github/workflows/strix-changed-path-quality-ci.yml

printf '%s\n' '== changed-path normalizer and consumers =='
rg -n -C 14 \
  'normalize_changed_file_path|allowed|raw.*\.\.|\.\.|realpath|read -r|printf|git diff|eval|sh -c|bash -c|STRIX_TEST_CHANGED_FILES_OVERRIDE' \
  scripts/ci/strix_quick_gate.sh

printf '%s\n' '== regression and dependency contracts =='
rg -n -C 5 \
  'Packrat|comma|parenthes|traversal|absolute|control|whitespace|backslash|shell|Unicode|out.of.root|require-hashes|only-binary|test_strix_quick_gate|coverage.*pytest|pytest|STRIX_TEST_CHANGED_FILES_OVERRIDE' \
  tests/test_strix_changed_path_policy.py \
  tests/test_strix_workflow_dependency_hashes.py \
  scripts/ci/test_strix_quick_gate.sh \
  .github/workflows/strix-changed-path-quality-ci.yml || true

printf '%s\n' '== doctoring and changelog =='
cat -n docs/doctoring/strix-legal-git-paths.md
tail -n 100 CHANGELOG.md

printf '%s\n' '== exact relevant diff =='
git diff --no-ext-diff --unified=45 "$base" "$head" -- \
  .github/workflows/strix-changed-path-quality-ci.yml \
  scripts/ci/strix_quick_gate.sh \
  scripts/ci/test_strix_quick_gate.sh \
  tests/test_strix_changed_path_policy.py \
  tests/test_strix_workflow_dependency_hashes.py \
  docs/doctoring/strix-legal-git-paths.md \
  CHANGELOG.md

printf '%s\n' '== unresolved review threads =='
gh api graphql -F owner='ContextualWisdomLab' -F name='.github' -F number=800 -f query='
query($owner: String!, $name: String!, $number: Int!) {
  repository(owner: $owner, name: $name) {
    pullRequest(number: $number) {
      reviewThreads(first: 100) {
        nodes {
          isResolved
          isOutdated
          comments(first: 1) { nodes { path line body } }
        }
      }
    }
  }
}' --jq '[.data.repository.pullRequest.reviewThreads.nodes[] | select((.isResolved | not) and (.isOutdated | not)) | {comments:.comments.nodes}]'

Length of output: 203473


🏁 Script executed:

#!/bin/bash
set -euo pipefail

log='/tmp/coderabbit-shell-logs/shell-output-lwnCNV'
repo='ContextualWisdomLab/.github'
head='87c302cf37343e5a816f1ddb24d3f6e0e12410d8'

printf '%s\n' '== retained identity and PR metadata =='
sed -n '1,120p' "$log"

printf '%s\n' '== live identity and status checks =='
printf 'checked-out: '; git rev-parse HEAD
printf 'requested:   '; git rev-parse "${head}^{commit}"
gh pr view 800 --repo "$repo" --json headRefOid,baseRefOid,statusCheckRollup \
  --jq '{headRefOid,baseRefOid,checks:[.statusCheckRollup[]|{name,status,conclusion}]}'

printf '%s\n' '== exact workflow test commands =='
nl -ba .github/workflows/strix-changed-path-quality-ci.yml | sed -n '50,70p'
printf '%s\n' '== shell-suite references in workflow =='
rg -n -C 2 'test_strix_quick_gate\.sh' .github/workflows/strix-changed-path-quality-ci.yml || true

printf '%s\n' '== shell-only changed-path regression cases =='
nl -ba scripts/ci/test_strix_quick_gate.sh | sed -n '8984,8998p'

printf '%s\n' '== doctoring workflow-completeness statement =='
nl -ba docs/doctoring/strix-legal-git-paths.md | sed -n '37,50p'

printf '%s\n' '== changed-path normalizer boundary =='
nl -ba scripts/ci/strix_quick_gate.sh | sed -n '386,445p'

Length of output: 14886


@seonghobae Exact-head review verdict: request changes.

I verified the checked-out commit and live PR head as 87c302cf37343e5a816f1ddb24d3f6e0e12410d8. I reviewed the six-file diff against e71fdab2ab088001f218765ecb5e3b7fabfee11a.

I found one actionable defect.

  • Line 61 in .github/workflows/strix-changed-path-quality-ci.yml runs python -m coverage run -m pytest tests -q.
  • The workflow does not run scripts/ci/test_strix_quick_gate.sh.
  • The shell suite contains changed-path regressions that pytest tests does not execute. These include Unicode slash-lookalike rejection and bidi-control rejection at Lines 8989-8995.
  • Therefore, a successful exact-head-path-policy job does not validate all central changed-path regressions.
  • The statement at Lines 47-49 in docs/doctoring/strix-legal-git-paths.md that the workflow runs the complete repository test suite is not supported.

Add bash scripts/ci/test_strix_quick_gate.sh to the verification step. Keep the existing pytest command.

The remaining inspected controls are correctly bounded. The normalizer adds only comma and ASCII parentheses. It rejects raw .. components before normalization. The workflow uses literal-head checkout, read-only contents permission, disabled checkout credentials, immutable action pins, Python 3.14, and hash-verified binary-only dependencies.

The live strix check remains IN_PROGRESS. I did not approve, modify, or merge the PR.

You are interacting with an AI system.

Copy link
Copy Markdown
Contributor Author

@opencode-agent @cwl-noema-review

Review-only exact-head request for 87c302cf37343e5a816f1ddb24d3f6e0e12410d8. Validate the bounded Strix legal-path compatibility repair, raw .. traversal rejection, permanent quality workflow, exact-head security evidence, doctoring/CHANGELOG claims, and unchanged reviewer/security controls. Do not update the branch, approve from the author identity, bypass protections, or merge.

Copy link
Copy Markdown
Contributor Author

@opencode-agent Perform a read-only exact-head review of PR #800 at 87c302cf37343e5a816f1ddb24d3f6e0e12410d8 against current base e71fdab2ab088001f218765ecb5e3b7fabfee11a; do not modify files or refs.

All exact-head Strix quality, CodeQL, Python Security, SAST, Security Scan, Secret Scan, OSV, Scorecard, SBOM, and CodeRabbit checks completed successfully. Independently verify the final six-file path boundary: legal comma/ASCII-parenthesis acceptance, raw .. rejection before normalization, empty/dot/absolute/control/whitespace/backslash/shell-metacharacter/unsupported-Unicode/out-of-root rejection, quoted argument handling, hash-locked binary-only tooling, full repository suite, documentation accuracy, zero unresolved actionable threads, and current base ancestry. Submit a formal current-head outcome only after exact inspection. Do not merge, auto-merge, rebase, retarget, release, or publish.

@seonghobae
seonghobae enabled auto-merge (squash) August 7, 2026 06:17

Copy link
Copy Markdown
Contributor Author

@opencode-agent
@cwl-noema-review

Please review the exact current head only. Verify the six-file legal Packrat-path repair, raw traversal rejection, quoted-argument boundary, exact-head quality evidence, and unresolved threads. Do not update the branch or merge.

Copy link
Copy Markdown
Contributor Author

@opencode-agent Implement the minimal permanent GREEN repair on exact current head 87c302cf37343e5a816f1ddb24d3f6e0e12410d8; stop without writing if the live head differs.

The exact-head read-only review found one valid coverage defect: .github/workflows/strix-changed-path-quality-ci.yml runs the Python suite through coverage but never executes scripts/ci/test_strix_quick_gate.sh. That shell suite contains independent changed-path regressions, including Unicode slash-lookalike and bidi-control rejection, which pytest tests does not exercise.

Modify only directly necessary permanent quality-contract files:

  1. In .github/workflows/strix-changed-path-quality-ci.yml, retain the complete python -m coverage run -m pytest tests -q command and add an explicit fail-closed execution of bash scripts/ci/test_strix_quick_gate.sh in the same exact-head job.
  2. Ensure the workflow paths trigger includes scripts/ci/test_strix_quick_gate.sh so changes to the shell regression suite always rerun this quality gate.
  3. Extend tests/test_strix_workflow_dependency_hashes.py or the existing workflow contract to require the shell suite path in both trigger scope and execution, while preserving immutable actions, hash-locked binary-only Python tooling, literal-head checkout, read-only permissions, compilation, Bash syntax, and clean-worktree checks.
  4. Update doctoring/CHANGELOG only if an existing statement claims complete path regression coverage without naming the shell suite.

Run bash scripts/ci/test_strix_quick_gate.sh first, then the full Python coverage suite, workflow contract tests, Python/Bash syntax checks, and git diff --check. Commit only the bounded permanent repair. Do not approve, merge, auto-merge, rebase, retarget, release, publish, or add any one-shot/repair workflow.

@coderabbitai

coderabbitai Bot commented Aug 7, 2026

Copy link
Copy Markdown

Note

GitHub couldn't provide a complete incremental comparison for this pull request, so CodeRabbit is performing a full review instead. This review may take a little longer.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 4

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In @.github/workflows/strix-changed-path-quality-ci.yml:
- Around line 6-12: Update the paths list in the strix-changed-path-quality-ci
workflow to include scripts/ci/test_strix_quick_gate.sh, ensuring changes only
to that shell regression suite trigger the quality workflow and satisfy the
required-path validation in test_strix_workflow_dependency_hashes.py.
- Around line 6-12: 워크플로 계약에 셸 회귀 스위트를 포함하십시오.
`.github/workflows/strix-changed-path-quality-ci.yml` 6-12행의 `paths`에
`scripts/ci/test_strix_quick_gate.sh`를 추가하고, 57-64행에서 `python -m coverage run -m
pytest tests -q` 직후 `bash scripts/ci/test_strix_quick_gate.sh`를 실행하십시오.
`docs/doctoring/strix-legal-git-paths.md` 47-49행은 워크플로가 셸 스위트를 실행하도록 변경한 뒤 기존
설명을 유지하고, 실행하지 않는 경우에만 설명을 축소하십시오.
- Around line 3-13: Update the workflow’s top-level on configuration to add the
workflow_dispatch trigger alongside pull_request, enabling manual execution
through the Actions UI or API. Extend the relevant contract test, such as the
workflow-trigger assertions in tests/test_strix_workflow_dependency_hashes.py,
to verify workflow_dispatch is present.

In `@docs/doctoring/strix-legal-git-paths.md`:
- Around line 47-49: Update the verification-scope description in
strix-legal-git-paths.md to match the workflow: either include
scripts/ci/test_strix_quick_gate.sh in the documented validation or revise the
claim about running the complete repository test suite to describe only the
checks actually executed.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: e52a6a28-f118-4551-b229-a3baefca2dca

📥 Commits

Reviewing files that changed from the base of the PR and between e71fdab and 70bdd49.

📒 Files selected for processing (6)
  • .github/workflows/strix-changed-path-quality-ci.yml
  • CHANGELOG.md
  • docs/doctoring/strix-legal-git-paths.md
  • scripts/ci/strix_quick_gate.sh
  • tests/test_strix_changed_path_policy.py
  • tests/test_strix_workflow_dependency_hashes.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • CHANGELOG.md

Comment thread .github/workflows/strix-changed-path-quality-ci.yml
Comment thread .github/workflows/strix-changed-path-quality-ci.yml
Comment thread docs/doctoring/strix-legal-git-paths.md
@opencode-agent
opencode-agent Bot disabled auto-merge August 7, 2026 06:31

Copy link
Copy Markdown
Contributor Author

@opencode-agent address

Exact head bb28a1f2088b009e5ab2e83f3110acefbf5e5e1c has three unresolved current-head CodeRabbit threads, and Strix Changed Path Quality CI remains queued. Apply the minimal contract correction:

  1. Add top-level workflow_dispatch: beside pull_request in .github/workflows/strix-changed-path-quality-ci.yml and test that it is present.
  2. Add scripts/ci/test_strix_quick_gate.sh to the workflow paths filter.
  3. Execute bash scripts/ci/test_strix_quick_gate.sh after the full Python coverage suite; retain bash -n scripts/ci/strix_quick_gate.sh and clean-worktree checks.
  4. Keep the doctoring claim only after this shell regression is actually executed.
  5. Run the focused workflow-contract tests, shell regression, complete central 100% statement/branch/docstring suite, and all exact-head security/supply-chain checks.

Preserve the bounded legal-path policy, raw traversal rejection, immutable pins, read-only permissions, reviewer identities, and six-file permanent scope plus the necessary existing shell regression trigger. Do not add temporary writers, bypass review, merge, or release.

Copy link
Copy Markdown
Contributor Author

The workflow_dispatch suggestion was re-evaluated against the complete central policy rather than applied in isolation. Exact-head run 31156812291, job 92798043647, proved the conflict: adding branch-selectable manual dispatch made the full suite fail test_no_central_workflow_exposes_branch_selected_manual_dispatch (1 failed, 969 passed). Central executable workflows must not load a caller-selected branch version before trusted-source and credential boundaries are established.

The branch now preserves the valid parts of the review—shell regression trigger path and execution, full repository coverage suite, and matching doctoring—while removing workflow_dispatch. tests/test_strix_workflow_dependency_hashes.py now permanently asserts that this workflow cannot expose branch-selected manual source. Any future manual/API entrypoint must be a separately designed default-branch-only dispatch with authenticated immutable target metadata; it is outside this bounded path-parser repair. Current exact head: 4ffa1dd823354acd160f868b24f47bf5971dcaad. Old check evidence does not transfer.

@coderabbitai coderabbitai Bot left a comment

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Actionable comments posted: 1

🤖 Prompt for all review comments with AI agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

Inline comments:
In `@tests/test_strix_workflow_dependency_hashes.py`:
- Around line 37-42: 강화된 YAML 키 검사를 위해
test_strix_workflow_rejects_branch_selected_manual_dispatch에서 re를 import하고
workflow_dispatch 키의 공백 및 작은따옴표·큰따옴표 표기를 모두 탐지하도록 정규식을 업데이트하세요. YAML 파서가 이미 사용
가능하면 on 섹션 아래의 workflow_dispatch 키를 구조적으로 검사하되, 해당 워크플로가 수동 디스패치를 포함하지 않아야 한다는
기존 동작은 유지하세요.
🪄 Autofix

Fix all unresolved CodeRabbit comments on this PR:

  • Push a commit to this branch (recommended)
  • Create a new PR with the fixes

ℹ️ Review info
⚙️ Run configuration

Configuration used: Organization UI

Review profile: CHILL

Plan: Pro Plus

Run ID: 9cc45491-eb81-461c-9e7b-b3fcf06e4f99

📥 Commits

Reviewing files that changed from the base of the PR and between bb28a1f and 48ebdff.

📒 Files selected for processing (3)
  • .github/workflows/strix-changed-path-quality-ci.yml
  • docs/doctoring/strix-legal-git-paths.md
  • tests/test_strix_workflow_dependency_hashes.py
🚧 Files skipped from review as they are similar to previous changes (1)
  • .github/workflows/strix-changed-path-quality-ci.yml

Comment on lines +37 to +42
def test_strix_workflow_rejects_branch_selected_manual_dispatch() -> None:
"""Central executable workflows load no branch-selected manual source."""
workflow = WORKFLOW.read_text(encoding="utf-8")

assert "workflow_dispatch:" not in workflow

Copy link
Copy Markdown

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

🔒 Security & Privacy | 🟠 Major | ⚡ Quick win

🧩 Analysis chain

🏁 Script executed:

printf '%s\n' '--- target test ---'
sed -n '1,140p' tests/test_strix_workflow_dependency_hashes.py
printf '%s\n' '--- related workflow files ---'
git ls-files | rg '(^|/)(\.github/workflows|.*workflow.*|.*strix.*)$' | head -80
printf '%s\n' '--- workflow_dispatch occurrences ---'
rg -n -C 3 'workflow_dispatch|on:' .github tests 2>/dev/null | head -240

Repository: ContextualWisdomLab/.github

Length of output: 21112


🏁 Script executed:

printf '%s\n' '--- Strix workflow ---'
sed -n '1,220p' .github/workflows/strix-changed-path-quality-ci.yml
printf '%s\n' '--- repository test/config dependencies ---'
rg -n '(^|[[:space:]])(PyYAML|ruamel|yaml|pytest)' pyproject.toml setup.cfg setup.py requirements*.txt tox.ini 2>/dev/null | head -120
printf '%s\n' '--- relevant history/diff summary ---'
git status --short
git diff --stat
git diff -- tests/test_strix_workflow_dependency_hashes.py .github/workflows/strix-changed-path-quality-ci.yml

Repository: ContextualWisdomLab/.github

Length of output: 3757


🏁 Script executed:

python3 - <<'PY'
import importlib.util
import re

samples = {
    "plain": "on:\n  workflow_dispatch:\n",
    "space_before_colon": "on:\n  workflow_dispatch :\n",
    "single_quoted": "on:\n  'workflow_dispatch':\n",
    "double_quoted": 'on:\n  "workflow_dispatch":\n',
}
pattern = re.compile(r"(?m)^\s*['\"]?workflow_dispatch['\"]?\s*:")
for name, text in samples.items():
    print(name, "raw=", "workflow_dispatch:" in text, "regex=", pattern.search(text) is not None)

for module in ("yaml", "ruamel.yaml"):
    print(module, bool(importlib.util.find_spec(module)))

if importlib.util.find_spec("yaml"):
    import yaml
    for name, text in samples.items():
        try:
            parsed = yaml.safe_load(text)
            print(name, "parsed_on_keys=", list(parsed.get(True, parsed.get("on", {}))) if isinstance(parsed, dict) else parsed)
        except Exception as exc:
            print(name, "parse_error=", type(exc).__name__, str(exc))
PY
printf '%s\n' '--- policy references ---'
rg -n -i -C 4 'branch[- ]selected|manual dispatch|workflow_dispatch|exact-head|central executable|untrusted branch' .github docs scripts tests | head -260

Repository: ContextualWisdomLab/.github

Length of output: 31808


🏁 Script executed:

ruby -ryaml <<'RUBY'
samples = {
  "plain" => "on:\n  workflow_dispatch:\n",
  "space_before_colon" => "on:\n  workflow_dispatch :\n",
  "single_quoted" => "on:\n  'workflow_dispatch':\n",
  "double_quoted" => "on:\n  \"workflow_dispatch\":\n",
}
samples.each do |name, text|
  begin
    parsed = YAML.safe_load(text, permitted_classes: [], aliases: false)
    on_value = parsed["on"] || parsed[true]
    puts "#{name} parsed=true on_keys=#{on_value.is_a?(Hash) ? on_value.keys.inspect : on_value.inspect}"
  rescue StandardError => e
    puts "#{name} parsed=false error=#{e.class}: #{e.message}"
  end
end
RUBY

Repository: ContextualWisdomLab/.github

Length of output: 386


workflow_dispatch 검사를 YAML 키 구조에 맞게 강화하세요.

현재 검사는 workflow_dispatch :, 'workflow_dispatch':, "workflow_dispatch":와 같이 YAML에서 유효한 표기를 놓칩니다. re를 import하고 해당 키 표기를 모두 검사하세요. YAML 파서를 사용할 수 있으면 on 아래 키를 구조적으로 검사하세요.

🤖 Prompt for AI Agents
Verify each finding against current code. Fix only still-valid issues, skip the
rest with a brief reason, keep changes minimal, and validate.

In `@tests/test_strix_workflow_dependency_hashes.py` around lines 37 - 42, 강화된
YAML 키 검사를 위해 test_strix_workflow_rejects_branch_selected_manual_dispatch에서 re를
import하고 workflow_dispatch 키의 공백 및 작은따옴표·큰따옴표 표기를 모두 탐지하도록 정규식을 업데이트하세요. YAML
파서가 이미 사용 가능하면 on 섹션 아래의 workflow_dispatch 키를 구조적으로 검사하되, 해당 워크플로가 수동 디스패치를 포함하지
않아야 한다는 기존 동작은 유지하세요.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants